" 获取当前 .vimrc 所在目录
let s:vimrc_dir = expand('<sfile>:p:h')

" 添加目录到 'packpath'
let &packpath .= ',' . s:vimrc_dir

packadd fzf
packadd fzf.vim
packadd surround.vim
packadd gruvbox.vim
packadd sonokai.vim
packadd lightline.vim
packadd commentary.vim
packadd rainbow.vim
packadd visual-multi.vim

set scrolloff=3         " 保持光标上下至少3行的滚动余量
set expandtab           " 将 tab 转为空格
set smarttab            " 根据上下文智能 tab 缩进
set shiftwidth=4        " 使用 4 个空格进行自动缩进
set tabstop=4           " 一个 tab 显示为 4 个空格宽度
set autoindent          " 自动缩进（复制上一行的缩进）
set cindent             " 使用 C 语言风格自动缩进
set smartindent         " 智能缩进
set ruler               " 显示行列号
set showmatch           " 高亮显示匹配的括号
set list                " 显示不可见字符
set listchars=tab:»·,trail:·    " 设置制表符和空格的显示方式
set cursorline          "当前行高亮
set hidden              " 禁止退出时提示保存
" set nowrap              " 禁用自动换行
" set paste               " 粘贴不乱
set cursorcolumn         " 突出显示当前列
set noeb                "去掉输入错误时的提示声音
set nowrapscan          "搜索到最后匹配的位置后,再次搜索不回到第一个匹配处
set softtabstop=4       "设置softtabstop有一个好处是可以用Backspace键来一次删除4个空格
set laststatus=2        "总是显示状态栏
set incsearch           " 增量搜索,边搜索边匹配
" 默认按下Esc后,需要等待1秒才生效,设置Esc超时时间为100ms,尽快生效
set ttimeout
set ttimeoutlen=100
syntax on               " 启用语法高亮

" 设置编码
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

" 彩虹括号插件
let g:rainbow_active = 1 "set to 0 if you want to enable it later via :RainbowToggle

" 多光标编辑
let g:VM_highlight_matches = 'underline' " 高亮匹配项
let g:VM_theme = 'ocean'

" lightline状态栏设置
let g:lightline = {
     \ 'colorscheme': 'sonokai',
     \ }

" Important!!
if has('termguicolors')
  set termguicolors
endif
set background=dark     " 使用暗色背景，或 light 试亮色

" colorscheme gruvbox     " 设置主题为 gruvbox
let g:sonokai_style = 'andromeda'
let g:sonokai_better_performance = 1
let g:sonokai_disable_italic_comment = 1
colorscheme sonokai     " 设置主题为 gruvbox

" 打开文件类型检测,并载入文件类型插件,为特定文件类型载入相关缩进文
filetype plugin indent on
set number              " 设置显示行号

set hlsearch            "高亮显示所有搜索到的内容
" 按下 ESC 时清除搜索高亮
" nnoremap <Esc> :noh<CR>

" Tab 补全行为
inoremap <silent><expr> <TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <silent><expr> <S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"

let mapleader = " "  " 设置 Leader 键为空格键

" fzf设置
" Leader + f 打开 fzf 查找文件
nnoremap <Leader>f :Files<CR>
" Leader + b 查找缓冲区
nnoremap <Leader>b :Buffers<CR>
" Leader + h 查找命令历史
nnoremap <Leader>h :History<CR>
" 搜索当前Buffer中的行
nnoremap <Leader>n :BLines<CR>
" 搜索所有已经加载的Buffer中行
nnoremap <Leader>l :Lines<CR>
" 查找当前光标下的单词
nnoremap <Leader>w :Rg <C-R><C-W><CR>

" leader自定义快捷键
nnoremap <Leader>p "0p
